FSx for Windows File Serverの監査ログをKinesis Data Firehose経由でS3バケットに保存してみた
FSx for Windows File Serverで監査ログが取得可能になりました!!
こんにちは のんピです。
皆さんは、FSx for Windows File Serverで監査ログを取得したいなと思ったことはありますか? ありますよね? 私は かなり あります。
特にそう感じた場面は、既存のファイルサーバーを FSx for Windows File Serverに移行を検討する場面です。
FSx for Windows File Serverに移行を検討するも、FSx for Windows File Serverでは監査ログが取れないことを危惧されるパターンが多くありました。
今まで出来ていたことが出来なくなるというのは、難しい判断になりますよね。
しかし、それがなんと、Amazon FSx for Windows File Server now supports file access auditing の通り、FSx for Windows File Serverで監査ログが取得可能になりました!!
これはアツいです。このアツさはアップデートを受信して、1分でツイートした私のテンションからお察しください。
Fsx for Windows File Serverに監査ログきたああああ!!!!
お客さんに案内しよ https://t.co/042axVIDT4
— のん / non-97 (@non____97) June 8, 2021
加えて、あまりのアツさで以下記事と早速ネタが被ってしまいました。
同じ内容の投稿をしても面白くないので、監査ログをKinesis Data Firehose経由で、S3バケットに保存するように設定してみました。
検証環境
検証を行う環境は以下の通りです。
FSx for Windows File Server を稼働させる定番の構成ですね。
ログの送信先は、CloudWatch Logsか、Kinesis Data Firehoseかのどちらかを選択可能ですが、今回は最初に説明した通り、Kinesis Data Firehoseを選択して、最終的にS3バケットに出力するようにしてみます。
やってみた
監査ログの送信先の変更
最初の構築の段階でCloudWatch Logsに送信するようにしていたので、送信先をKinesis Data Firehoseに変更します。
送信先を変更する際は、管理
タブから、管理
をクリックします。
続いて送信先をKinesis Data Firehose
に変更します。また、送信先の配信ストリームは新規に作成したいので、新しく作成
をクリックします。
そうすると、別タブでKinesis Data Firehoseの配信ストリームのウィザードが開きます。
まずは配信ストリームの名前と、送信元、サーバーサイドの暗号化の設定です。
ここでは、配信ストリームの名前のみデフォルトから変更します。配信ストリームの名前は、以下公式ドキュメントの通り、プレフィックスをaws-fsx-
にします。
The name of the Kinesis Data Firehose delivery stream must begin with the aws-fsx- prefix. If you don't have an existing Kinesis Data Firehose delivery stream, you can create one when you create or update your file system at the console.
次はレコードの処理設定です。今回はレコードに対して何も処理を行わないので、デフォルトのままにします。
次に送信先の設定です。今回はS3バケットを送信先にするので、Amazon S3
を選択します。また、S3バケットは新規に作成したいので、Create new
をクリックします。
モーダルウィンドウが開くので、S3バケットの名前とリージョンを指定して、Create S3 bucket
をクリックします。
S3バケットに出力する際、プレフィックスを指定できますが、今回は指定せずに次に行きます。
最後に、諸々の設定です。デフォルトの設定から変更した箇所は、データの圧縮と、暗号化の設定についてです。それ以外はデフォルトで、Next
をクリックします。
設定の確認を行います。問題がなければ、Create delivery stream
をクリックして、配信ストリームを作成します。
しばらくすると、配信ストリームのステータスが、Active
に変わります。
それでは、改めてFsx for Windows File Serverの画面に戻って、設定変更を行います。
先ほど作成した配信ストリームを選択して、保存
をクリックします。
更新のステータスは、更新
タブから確認出来ます。
監査ログの送信先変更は、メンテナンスウィンドウに関係なく、即時で実行されるようです。
設定が完了すると、監査イベントログの送信先
が作成した配信ストリームになっていることが確認できます。
監査ログの確認
それでは、監査ログの確認を行います。
ドメインに参加しているEC2インスタンスから操作を行います。
まず、FSx for Windows File Serverの共有フォルダをネットワークドライブとしてマウントします。マウントは、net use
コマンドで行いました。
続いて、ファイルとフォルダーを操作した際の監査ログを出力するため、監査アクセスの設定を行います。
監査アクセス設定を行わない場合、ファイルやフォルダーに対する監査ログは出力されません。
共有フォルダ全体に、監査アクセスの設定を行うため、マウントしたZドライブ上で、右クリックをして、[プロパティ] - [セキュリティ] - [詳細] - [監査]
タブを選択し、追加
をクリックします。
まずは監査対象となるオブジェクトを選択する必要があるため、プリンシパルの選択
をクリックします。
今回はどんなオブジェクトからでの操作も監査対象としたいため、Everyone
を選択しました。
続いて、監査対象の操作内容を設定します。
監査の種類は、操作の成功・失敗問わず、ログに記録したいため、すべて
を選択しました。また、監査対象なる操作一覧を確認するため、高度なアクセス許可
をクリックします。
今回は全ての操作を監査対象としたいため、フルコントロール
にチェックを入れます。全ての操作内容にチェックが入ったことを確認して、OK
をクリックします。
監査エントリに先ほど作成したエントリが追加されたことを確認して、適用
をクリックします。
監査ログの設定準備が完了したので、実際に共有フォルダ上で操作をしていきます。
行った操作は以下の通りです。
- 共有フォルダ上に、
text-folder
を作成 text-folder
配下に、test-file
というテキストファイルを作成text-file
を開き、適当な文字列を入力text-file
を削除
S3バケットを確認すると、どうやら正常にログが出力されているようです。
それでは、監査ログを確認してみます。
監査ログはxml形式で出力されます。どのような操作がされたログなのかを判断する際は、EventID
と、AccessList
を照らし合わせながら行います。
EventID
と、AccessList
の対応は以下の通りです。
EventID
EventID | 操作内容 |
---|---|
4656 | オブジェクトに対するハンドル要求 |
4659 | ファイルを削除要求 |
4660 | オブジェクトの削除 |
4663 | オブジェクトに対して何かしらの操作 詳細はAccessListを参照 |
4670 | オブジェクトのアクセス許可変更 |
5140 | ファイル共有へのアクセス |
5144 | ファイル共有の削除 |
5145 | ファイル共有レベルでのアクセス拒否 |
AccessList
AccessListの値 | 捜査内容 |
---|---|
%%4416 | フォルダーの一覧/データの読み取り |
%%4417 | ファイルの作成/データの書き込み |
%%4418 | フォルダーの作成/データの追加 |
%%4419 | 拡張属性の読み取り |
%%4420 | 拡張属性の書き込み |
%%4421 | フォルダーのスキャン/ファイルの実行 |
%%4422 | サブフォルダーとファイルの削除 |
%%4423 | 属性の読み取り |
%%4424 | 属性の書き込み |
%%1537 | 削除 |
%%1538 | アクセス許可の読み取り |
%%1539 | アクセス許可の変更 |
%%1540 | 所有権の取得 |
%%1541 | オブジェクトの同期 |
%%1542 | SACL の取得 |
上述した操作に対応した監査ログは以下の通りです。なお、ログは対象操作のみを抜粋しています。実際のログはフォルダー・ファイルの操作をする度に、アクセス許可の読み取り
や、属性の読み取り
についても行っているため、かなりのボリュームになっています。
1. 共有フォルダ上に、text-folderを作成 のログ
<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'> <System> <Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/> <EventID>4663</EventID> <Version>1</Version> <Level>0</Level> <Task>12800</Task> <Opcode>0</Opcode> <Keywords>0x8020000000000000</Keywords> <TimeCreated SystemTime='2021-06-09T01:56:08.228201400Z'/> <EventRecordID>287143</EventRecordID> <Correlation/> <Execution ProcessID='4' ThreadID='184'/> <Channel>Security</Channel> <Computer>amznfsxa67gtfky.corp.non-97.net</Computer> <Security/> </System> <EventData> <Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data> <Data Name='SubjectUserName'>Admin</Data> <Data Name='SubjectDomainName'>corp</Data> <Data Name='SubjectLogonId'>0xa6bf97</Data> <Data Name='ObjectServer'>Security</Data> <Data Name='ObjectType'>File</Data> <Data Name='ObjectName'>\Device\HarddiskVolume13\share</Data> <Data Name='HandleId'>0x132c</Data> <Data Name='AccessList'>%%4418 </Data> <Data Name='AccessMask'>0x4</Data> <Data Name='ProcessId'>0x4</Data> <Data Name='ProcessName'></Data> <Data Name='ResourceAttributes'>S:PAI</Data> </EventData> </Event>
2. text-folder配下に、test-fileというテキストファイルを作成 のログ
<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'> <System> <Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/> <EventID>4663</EventID> <Version>1</Version> <Level>0</Level> <Task>12800</Task> <Opcode>0</Opcode> <Keywords>0x8020000000000000</Keywords> <TimeCreated SystemTime='2021-06-09T01:56:14.509183100Z'/> <EventRecordID>287150</EventRecordID> <Correlation/> <Execution ProcessID='4' ThreadID='6912'/> <Channel>Security</Channel> <Computer>amznfsxa67gtfky.corp.non-97.net</Computer> <Security/> </System> <EventData> <Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data> <Data Name='SubjectUserName'>Admin</Data> <Data Name='SubjectDomainName'>corp</Data> <Data Name='SubjectLogonId'>0xa6bf97</Data> <Data Name='ObjectServer'>Security</Data> <Data Name='ObjectType'>File</Data> <Data Name='ObjectName'>\Device\HarddiskVolume13\share\test-folder\新しいテキスト ドキュメント.txt</Data> <Data Name='HandleId'>0x138c</Data> <Data Name='AccessList'>%%4417 </Data> <Data Name='AccessMask'>0x2</Data> <Data Name='ProcessId'>0x4</Data> <Data Name='ProcessName'></Data> <Data Name='ResourceAttributes'>S:AI</Data> </EventData> </Event>
3. text-fileを開き、適当な文字列を入力 のログ
<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'> <System> <Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/> <EventID>4663</EventID> <Version>1</Version> <Level>0</Level> <Task>12800</Task> <Opcode>0</Opcode> <Keywords>0x8020000000000000</Keywords> <TimeCreated SystemTime='2021-06-09T01:56:45.308483800Z'/> <EventRecordID>287164</EventRecordID> <Correlation/> <Execution ProcessID='4' ThreadID='1720'/> <Channel>Security</Channel> <Computer>amznfsxa67gtfky.corp.non-97.net</Computer> <Security/> </System> <EventData> <Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data> <Data Name='SubjectUserName'>Admin</Data> <Data Name='SubjectDomainName'>corp</Data> <Data Name='SubjectLogonId'>0xa6bf97</Data> <Data Name='ObjectServer'>Security</Data> <Data Name='ObjectType'>File</Data> <Data Name='ObjectName'>\Device\HarddiskVolume13\share\test-folder\test-file.txt</Data> <Data Name='HandleId'>0x12bc</Data> <Data Name='AccessList'>%%4417 </Data> <Data Name='AccessMask'>0x2</Data> <Data Name='ProcessId'>0x4</Data> <Data Name='ProcessName'></Data> <Data Name='ResourceAttributes'>S:AI</Data> </EventData> </Event>
4. text-fileを削除 のログ
<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'> <System> <Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/> <EventID>4659</EventID> <Version>0</Version> <Level>0</Level> <Task>12800</Task> <Opcode>0</Opcode> <Keywords>0x8020000000000000</Keywords> <TimeCreated SystemTime='2021-06-09T01:58:00.304083200Z'/> <EventRecordID>287180</EventRecordID> <Correlation/> <Execution ProcessID='4' ThreadID='1720'/> <Channel>Security</Channel> <Computer>amznfsxa67gtfky.corp.non-97.net</Computer> <Security/> </System> <EventData> <Data Name='SubjectUserSid'>S-1-5-21-2080479861-2474753211-478539028-1113</Data> <Data Name='SubjectUserName'>Admin</Data> <Data Name='SubjectDomainName'>corp</Data> <Data Name='SubjectLogonId'>0xa6bf97</Data> <Data Name='ObjectServer'>Security</Data> <Data Name='ObjectType'>File</Data> <Data Name='ObjectName'>\Device\HarddiskVolume13\share\test-folder\test-file.txt</Data> <Data Name='HandleId'>0x0</Data> <Data Name='TransactionId'>{00000000-0000-0000-0000-000000000000}</Data> <Data Name='AccessList'>%%1537 %%4423 </Data> <Data Name='AccessMask'>0x10080</Data> <Data Name='PrivilegeList'>-</Data> <Data Name='ProcessId'>0x4</Data> </EventData> </Event>
大量のログ出力が予想される場合は、S3バケットに保存した方が良いかも
Kinesis Data Firehoseを使ってスムーズにS3バケットに監査ログを出力することが出来ました。
ファイルサーバーの監査ログは、監査したい操作内容、監査対象のオブジェクトの数によって、大量のログが出力されることが予想されます。
そのような予想ができる場合は、Kinesis Data Firehoseを使用して、S3バケットにログを保存するようにすれば、ログ保存の課金を節約することが出来ると考えます。
今まで、「FSx for Windows File Serverに移行したいけど、監査ログが取れないと嫌だなぁ」と思っていた方は多くいらっしゃったのではないでしょうか。
今回のアップデートで、AWSへのファイルサーバーの移行のハードルがまた一段下がったと思います。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!